
local CommonOHOH=_G.CommonOHOH
local car_cfg=_G.CommonOHOH.config.Car
-- 1:钻头，2：车轮，3：车身，4：推进器：5 装饰
local asset={
    [1]="ReplicatedStorage.Car.Weapon",
    [2]="ReplicatedStorage.Car.Ring",
    [3]="ReplicatedStorage.Car.Body",
    [4]="ReplicatedStorage.Car.Tail",
    [5]="ReplicatedStorage.Car.Flag",
}

local gradeColor={
    [1]=Color3.new(0.20392156862745098, 0.3058823529411765, 0.19607843137254902),
    [2]=Color3.new(0.20392156862745098, 0.3058823529411765, 0.19607843137254902),
    [3]=Color3.new(0.20392156862745098, 0.3058823529411765, 0.19607843137254902),
    [4]=Color3.new(0.20392156862745098, 0.3058823529411765, 0.19607843137254902),
    [5]=Color3.new(0.20392156862745098, 0.3058823529411765, 0.19607843137254902),
}


local gradeValueBoost={
    [1]=1,
    [2]=10,
    [3]=100,
    [4]=1000,
    [5]=10000,
}

local gradeWightBoost={
    [1]=1,
    [2]=10,
    [3]=100,
    [4]=1000,
    [5]=10000,
}

local CarPartImageBuff={}
local CarPartModelBuff={}

local M={}



--根据carId，获取部件id（配置表中的Id和品阶Id（1：正常:2：闪亮:3：彩虹:4：虚空）
function M.GetPartIdAndGrade(carId)

    local arg=string.split(carId,"_")
    return tonumber(arg[1]), tonumber(arg[2])

end

--根据品阶重新计算部件的数值
function M.UpdateCalculateValue(data)
    -- CommonOHOH:PrintTable(data)
    local list={}
    for _,v in ipairs(data.value) do
       table.insert(list,gradeValueBoost[data.gradeId]*v)
    end

    return list
end
--根据品阶重新计算部件的随机权重
function M.UpdateCalculateWeight(data)
    -- CommonOHOH:PrintTable(data)
    return gradeWightBoost[data.gradeId]*data.weight
end


----------------------------------------------以下为公开接口------------------------------------------------------------------

--传入部件和品阶Id，生成存入数据库的汽车Id
function M.GetCarId(partId,grade)
    return partId.."_"..grade
end


--获取部件图片,参数：carId
function M.GetPartImage(carId)

    local data=M.GetPartCfgData(carId,true)
    assert(data," info is Null"..carId)
    if CarPartImageBuff[data.id] then
        return CarPartImageBuff[data.id]
    end
    local path= string.format("%s.%s.Icon",asset[data.type],data.asset)
    local icon= CommonOHOH:GetPath_Loop(path)
    CarPartImageBuff[data.id]=icon.Image
    return CarPartImageBuff[data.id]
end

--创建部件模型，参数：cartId
function M.CreatePartModel(carId)
    local data=M.GetPartCfgData(carId,true)
    if CarPartModelBuff[data.id] then
        return CarPartModelBuff[data.id]:Clone()
    end
    assert(data," info is Null"..carId)
    local path= string.format("%s.%s.Model",asset[data.type],data.asset)
    local Model= CommonOHOH:GetPath_Loop(path)
    CarPartModelBuff[data.id]=Model
    return CarPartModelBuff[data.id]:Clone()
end


--判断哪一个部件更好:carId1>carId2返回true，否则false（同类型部件比较）
function M.IsBetter(carId1,carId2)
    local cfg1=M.GetPartCfgData(carId1)
    local cfg2=M.GetPartCfgData(carId2)
    return cfg1.weight>cfg2.weight
end


--获取部件配置数据，参数：cartId
function M.GetPartCfgData(carId,isNotCalculate) --isNotCalculate 为true 表示：不需要计算新值，不需要深拷贝
    local pid,gid=M.GetPartIdAndGrade(carId)
    local data=car_cfg.Info[pid]
    if isNotCalculate then
        return data
    else
         local d2=CommonOHOH:DeepCopy(data)
         d2["gradeId"]=gid --品阶ID
         d2["gradeColor"]=gradeColor[gid] --品阶颜色
         d2.value=M.UpdateCalculateValue(d2) --更新数值
         d2.weight=M.UpdateCalculateWeight(d2) --更新权重
         return d2
    end
   
end


--（重要）获取部件所有数值，参数：cartId
function M.GetPartAllInfo(carId)
    return {
        cfg=M.GetPartCfgData(carId),
        icon=M.GetPartImage(carId),
        model=M.CreatePartModel(carId),
    }
end
--玩家是否赢,侧式参数 （玩家id 对手id）
function M.IsPlayerWin(userId,rivalId)
    return false--
end

return M